package com.stellar.pay.core.entity;

import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 微信退款结果DTO
 */
@Data
public class RefundResultDTO {
    /**
     * 基础信息
     */
    private String refundId; // 微信退款单号

    private String outRefundNo; // 商户退款单号

    private String transactionId; // 微信订单号

    private String outTradeNo; // 商户订单号

    private String channel; // 退款渠道

    private String userReceivedAccount; // 退款资金

    private String status; // 退款状态

    private String fundsAccount; // 退款资金来源

    private String errorMessage; // 退款失败原因

    /**
     * 时间信息
     */
    private LocalDateTime successTime; // 退款成功时间

    private LocalDateTime createTime; // 退款创建时间

    /**
     * 金额信息
     */
    private RefundAmountDTO amount;

    /**
     * 优惠详情
     */
    private List<PromotionDetailDTO> promotionDetails;

    @Data
    public static class RefundAmountDTO {
        private Long total;          // 原订单总金额（分）
        private Long refund;         // 退款金额（分）
        private String currency;       // 货币类型
        private Long payerTotal;     // 用户支付金额（分）
        private Long payerRefund;   // 用户退款金额（分）
        private Long discountRefund; // 优惠退款金额（分）
        private List<FundSourceDTO> from; // 资金账户来源
    }

    @Data
    public static class FundSourceDTO {
        private String account;  // 资金来源账户
        private Long amount;  // 对应出资金额（分）
    }

    @Data
    public static class PromotionDetailDTO {
        private String promotionId;
        private String type;
        // 优惠类型如 COUPON
        private Long amount;
        // 优惠总金额（分）
        private Long refundAmount; // 优惠退款金额（分）
        private List<GoodsDetailDTO> goodsDetails;
    }

    @Data
    public static class GoodsDetailDTO {
        private String goodsId;        // 商品ID
        private String goodsName;      // 商品名称
        private Long unitPrice;     // 单价（分）
        private Long refundAmount;  // 商品退款金额（分）
        private Integer refundQuantity; // 退款数量
    }
}